package com.wolves.career.controller;


import com.wolves.career.entity.UserPermissionsAccount;
import com.wolves.career.service.UserPermissionsAccountService;
import com.wolves.career.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author 麦翔盛
 * @since 2021-10-19
 */
@RestController
@CrossOrigin
@RequestMapping("/user")
public class UserPermissionsAccountController {
    @Autowired
    private UserPermissionsAccountService accountService;

    /**
     * 登录
     *
     * @param accountId
     * @param password
     * @return
     */
    @GetMapping("/login/{accountId}/{password}")
    public R login(@PathVariable("accountId") String accountId,
                   @PathVariable("password") String password) {
        UserPermissionsAccount user = accountService.getById(accountId);
        if (user == null) {
            return R.error().message("没有该用户");
        }
        if (!user.getPassword().equals(password)){
            return R.error().message("密码错误");
        }
        return R.ok().data("Account",user);
    }

    /**
     * 注册
     *
     * @param user 新用户对象
     * @return
     */
    @PostMapping("/register")
    public R updatePassword(@RequestBody(required = true)
                                    UserPermissionsAccount user) {
        boolean save = accountService.save(user);
        if (!save){
            return R.error().message("注册失败");
        }
        return R.ok().data("success",true);
    }

    /**
     * 修改密码
     *
     * @param accountId   账号id
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return
     */
    @PutMapping("/updatePassword/{accountId}/{oldPassword}/{newPassword}")
    public R updatePassword(@PathVariable("accountId") String accountId,
                            @PathVariable("oldPassword") String oldPassword,
                            @PathVariable("newPassword") String newPassword) {

        boolean exist = accountService.exist(accountId, oldPassword);
        if (!exist){
            return R.error().message("密码错误").data("success",false);
        }
        //更新操作
        boolean update = accountService.updatePassword(accountId,oldPassword,newPassword);
        if (!update){
            return R.error().message("新旧密码重复").data("success",false);
        }
        return R.ok().data("success",true);
    }

    /**
     * 更新用户名
     *
     * @param accountId
     * @param newUsername
     * @return
     */
    @PutMapping("/updateUsername/{accountId}/{newUsername}")
    public R updateUsername(@PathVariable("accountId") String accountId,
                            @PathVariable("newUsername") String newUsername) {
        boolean update = accountService.updateUsername(accountId,newUsername);
        if (!update){
            return R.error().message("更新失败").data("success",false);
        }
        return R.ok().data("success",true);
    }

    /**
     * 更新用户头像 这里要用到oss 需要复习一下再实现
     *
     * @param accountId 账号id
     * @param avatar    新图像的url
     * @return
     */
    @PostMapping("/updateAvatar/{accountId}/{avatar}")
    public R updateAvatar(@PathVariable("accountId") String accountId,
                          @PathVariable("avatar") String avatar) {
        return R.ok();
    }

    /**
     * 登出，这里应该由前端实现
     *
     * @return
     */
    public R logout() {
        return R.ok();
    }

    /**
     * 返回个人信息
     *
     * @param accountId
     * @return
     */
    @GetMapping("/getInfo/{accountId}")
    public R getInfo(@PathVariable("accountId") String accountId) {
        UserPermissionsAccount user = accountService.getById(accountId);
        return R.ok().data("Admin",user);
    }

    /**
     * 找回密码
     *
     * @param accountId 账号id
     * @param telephone 电话号码
     * @return
     */
    @GetMapping("/retrievePassword/{accountId}/{telephone}")
    public R retrievePassword(@PathVariable("accountId") String accountId,
                              @PathVariable("telephone") String telephone) {
        return R.ok();
    }

    /**
     * 更改电话号码
     *
     * @param newTelephone
     * @return
     */
    @PutMapping("/updateTelephone/{accountId}/{newTelephone}")
    public R updateTelephone(@PathVariable String accountId,
                             @PathVariable Integer newTelephone) {
        boolean update = accountService.updateTelephone(accountId, newTelephone);
        if (!update){
            return R.error().message("更新失败").data("success",false);
        }
        return R.ok().data("success",true);
    }


}

